#[test]
fn test_find_disappeared_numbers() {
    assert_eq!(
        find_disappeared_numbers(vec![4, 3, 2, 7, 8, 2, 3, 1]),
        vec![5, 6]
    );

    assert_eq!(find_disappeared_numbers(vec![1, 1]), vec![2]);
}
/*
    448. 找到所有数组中消失的数字
    给你一个含 n 个整数的数组 nums ，其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字，并以数组的形式返回结果。

    示例 1：
    输入：nums = [4,3,2,7,8,2,3,1]
    输出：[5,6]

    示例 2：
    输入：nums = [1,1]
    输出：[2]

    提示：
    n == nums.length
    1 <= n <= 105
    1 <= nums[i] <= n
    进阶：你能在不使用额外空间且时间复杂度为 O(n) 的情况下解决这个问题吗? 你可以假定返回的数组不算在额外空间内。
*/
pub fn find_disappeared_numbers(nums: Vec<i32>) -> Vec<i32> {
    // let mut res = Vec::new();
    // let mut flags = vec![false; nums.len()];

    // for v in nums {
    //     flags[v as usize - 1] = true;
    // }

    // for i in 0..flags.len() {
    //     if !flags[i] {
    //         res.push(i as i32 + 1);
    //     }
    // }
    // return res;

    let mut res = nums.iter().enumerate().map(|(i, _)| i as i32 + 1).collect::<Vec<i32>>();
    nums.iter().enumerate().for_each(|(_, &v)| res[v as usize - 1] = 0);
    return res.into_iter().filter(|&v| v > 0).collect();
}
